/**
 * 下载解析错误文件
 * @param filename： 必传，下载的文件名
 * @param content：必传，生成文件的内容
 * @param contentType：非必传，文件类型
 */
export function downloadErrorFile(filename, content, contentType) {
  if (!contentType) contentType = 'application/octet-stream';
  let a = document.createElement('a');
  let blob = new Blob([content], { 'type': contentType });
  a.href = window.URL.createObjectURL(blob);
  a.download = filename;
  a.click();
}

/**
 * 文件流下载
 * @param fileId：必传，文件上传时的id ,传入url时，传空字符串，类型：String
 * @param fileName：必传, 下载文件名，类型：String
 * @param url：非必传，下载地址，类型：String
 */
export function downByBlob(fileId, fileName, url) {
  let downPath = url || 'a/uploadhistory/uploadHistory/download/' + fileId
  this.$store.dispatch('saveData', {
    url: downPath,
    method: 'get',
    noCommit: true,
    responseType: 'blob'
  }).then((res) => {
    downFile(res, fileName)
  })
}

/**
 * 批量文件流下载
 * @param fileId：必传，文件上传时的id ,传入url时，传空字符串，类型：String
 * @param fileName：必传, 下载文件名，类型：String
 * @param fn：非必传，下载状态函数，类型：function
 */
export function downByBlobLargeFile(fileId, fileName, fn) {
  if (typeof fn === 'function') {
    fn()
  }
  let downPath = 'a/uploadhistory/uploadHistory/download'
  this.$store.dispatch('saveData', {
    url: downPath,
    method: 'post',
    data: fileId,
    noCommit: true,
    headers: {
      'Content-Type': 'text/plain'
    },
    responseType: 'blob'
  }).then((res) => {
    downFile(res, fileName)
  }).finally(() => {
    if (typeof fn === 'function') {
      fn()
    }
  })
}

/**
 * 文件流下载
 * @param res：必传，返回的文件流
 * @param fileName：必传，下载的文件名
 */
export function downFile(res, fileName) {
  if (res) {
    if ('msSaveBlob' in navigator) { // 对IE和Edge的兼容
      window.navigator.msSaveBlob(res, fileName || '')
    } else {
      let blob = res
      let a = document.createElement('a')
      let url = window.URL.createObjectURL(blob)
      let evt = document.createEvent('HTMLEvents') // 对firefox的兼容
      evt.initEvent('click', false, false) // 对firefox的兼容
      a.style.display = 'none'
      a.href = url
      a.download = fileName || ''
      a.dispatchEvent(evt) // 对firefox的兼容
      a.click()
      window.URL.revokeObjectURL(url)
    }
  }
}

/**
 * 导出表格数据
 * @param postData：必传，当前搜索参数
 * @param url：必传，接口路径
 * @param titleText：必传，当前模块标题
 */
export function exportTable(postData, url, titleText) {
  this.$store.dispatch('saveData', {
    method: 'post',
    url: url,
    data: postData,
    responseType: 'blob',
    noCommit: true
  }).then((res) => {
    this.$downFile(res, titleText + this.moment(window.serverTime).format(' YYYY-MM-DD hh:mm:ss') + '.xls')
  })
}
